Application logs are a major source of information for large-scale analytics. In web applications, where the behaviors of the applications are observable from the web servers through application programming interface (API) calls, the web server logs are used to perform analytics. Since the web servers reside on the service provider side, the service providers can easily change the data to be logged as well as the granularity of logging as needs arise. For instance, in response to a customer complaint, the developers can increase the detail of the logs for a particular API call, to figure out the source of the complaint, or they can choose to monitor certain clients' activity more closely.
The application behavior is not readily observable for mobile and desktop applications. Many mobile and desktop applications are standalone executables with local storage and presentation. Most of the applications that use network connectivity only use the network for a subset of the activities. Logging mechanisms are used to create logs for tracing the lifetime of the application. Usually this involves adding log statements to the application code, which instructs the logging mechanism to store and/or forward the logged data to a server. These sprinkled log statements clutter the application source code. It also becomes a challenge to maintain consistency of the log format across different developers working on the application. Moreover, since the log statements are compiled into the application flow, they incur a performance penalty, and spurious log data will inflate the communication load with the analytics server. Replacing all the installed application instances with a new version of the application that has different log granularities is just not a practical approach, especially for mobile devices.